iT邦幫忙

2023 iThome 鐵人賽

DAY 4
0

目標:製作一個人類圖模組
輸入:生日日期時間
輸出:一 2x13(共 26 個數字)的人類圖矩陣

建模

TypeScript auto-accessor 可以參考這個 PR

等待 EMCAScript: proposal-grouped-and-auto-accessors 上線後準備將 setter 列為 private

Substructure

export class Substructure implements ISubstructure {
  // @TODO accessor gate { get; #set; }: number;
  accessor gate: number;
  accessor line: number;
}

Imprint

export class Imprint implements IImprint {
  accessor sun: Substructure;
  accessor earth: Substructure;
  accessor moon: Substructure;
  accessor northNode: Substructure;
  accessor southNode: Substructure;
  accessor mercury: Substructure;
  accessor venus: Substructure;
  accessor mars: Substructure;
  accessor jupiter: Substructure;
  accessor saturn: Substructure;
  accessor uranus: Substructure;
  accessor neptune: Substructure;
  accessor pluto: Substructure;
}

BodyGraph

export class BodyGraph implements IBodyGraph {
  accessor personality: Imprint;
  accessor design: Imprint;
}

未來優化方向

若將 BodyGraph 視為 Value Object,我們可以發現同一出生時辰會得到同一組 BodyGraph,因此有機會透過出生時辰作為鍵值,共用同一組 BodyGraph。

計算星球位置

這邊會用到幾個來自 swisseph 的方法:

  • swe_julday():從 UTC 時間轉換為尤利安曆(Julian)時間
  • swe_calc_ut():根據尤利安曆時間計算星球位置
  • swe_degnorm():標準化角度
  • swe_solcross_ut():尋找太陽位於某個角度的尤利安曆時間

計算個性

  • 先利用 swe_julday() 取得出生時的尤利安曆時間
  • 接著利用 swe_calc_ut() 計算出生時十三顆星球的位置

十三顆星球分別為太陽、地球、月亮、北交點、南交點、水星、金星、火星、木星、土星、天王星、海王星和冥王星

計算設計

  • 先利用 swe_julday() 取得出生時的尤利安曆時間
  • 接著利用 swe_calc_ut() 取得當時的太陽位置
  • 將得到的太陽位置扣除 88 度
  • 因為有可能得到負值,利用 swe_degnorm() 將該角度標準化,使其落在 0~360 度之間
  • 利用 swe_solcross_ut() 從出生 100 天前開始,計算下一次太陽交叉於前述角度的尤利安曆時間
  • 最後利用 swe_calc_ut() 計算該時間點十三顆星球的位置

遭遇困難

swe_solcross_ut() is not a function

swe_solcross_ut() 是後來版本的 Swiss Ephemeris 新加入的方法,目前 NodeJS 的 swisseph 模組並未更新至該版本,導致找不到 swe_solcross_ut() 方法。

可能解法

自行 fork 一個 swisseph 模組,並利用 gyp 重新打包新版的 Swiss Ephemeris。

目前卡在這一步,明天繼續努力...。


晚安,瑪卡巴卡。


上一篇
人類圖基礎:從生辰到星盤(1)
下一篇
人類圖基礎:從生辰到星盤(3)
系列文
「莫忘初衷,從猴子到超人」:一個獻給自由精靈的社群媒合引擎18
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言